<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // promise 除了可以作为构造函数  通过new 调用  还可以作为对象 调用静态的方法

      // 1. Promise.resolve 将现有对象转为promise对象
      Promise.resolve("a"); // 等价于 new Promise(resolve => resolve('a'))

      // 2. Promise.reject  和resolve方法一样  不过执行的是reject方法
      const e = Promise.reject("e");
      console.log(e);
      e.catch((err) => {
        console.log("失败", err);
      });

      // 这两个方法的使用场景
      // resolve 可以在封装axios请求的时候 针对一些需要定时发送请求的数据  可以在本地做一次缓存  通过 Promise.resolve方法 将结果抛出 这样在页面还可以用then接收
      // reject  在封装axios请求时 需要的是对象结构的参数 但是页面传的参数是字符串 此时可以用 Promise.reject 方法将错误信息提示出来
      // https://www.bilibili.com/video/BV1jG411g7NC?p=8&spm_id_from=pageDriver&vd_source=9692138fa17ef60935af0446f91220dd


      // 3. Promise.all  并发多个Promise
      // 场景：进入首页时，同时并发多个网络请求，这几个请求并没有互相关联
      // const p1 = async () => {
      //   const res = await Api1();
      // };
      // const p2 = async () => {
      //   const res = await Api2();
      // };
      // const p3 = async () => {
      //   const res = await Api3();
      // };
      // const p = Promise.all([p1, p2, p3]);
      // 特点： p1 p2 p3的 promise状态都是成功的状态时， p的状态才是成功 ；p1 p2 p3 有一个是失败 那么p的状态就是失败


      // 4. Promise.race  和 all方法类似 p1 p2 p3其中一个的promise实例的状态就是p的状态
      

      // 5. Promise.any 只有参数里的promise实例有一个是成功的状态 那么 包装的实例就是成功状态。如果所有的参数实例都是失败状态，包装的实例就是失败状态
      

      // 6. Promise.allSettled  可以用来确定一组Promise实例的异步操作是否都结束了 同时有成功和失败的结果

    </script>
  </body>
</html>
